import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.io.Serializable;

public class Conetor extends Desenhavel implements IPontosListener,
		Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -800557290408051000L;

	/**
	 * 
	 */

	private ConetorSul conetorSul;

	private ConetorNorte conetorNorte;

	private ConetorEste conetorEste;

	private ConetorOeste conetorOeste;

	private Retangulo retanguloEnvolvente;

	private Identificador identificador;

	private ConetorTipo opcaotipo;

	private OpcaoConetor opcao;

	public Conetor(Identificador identificador, Retangulo retanguloEnvolvente) {
		this.retanguloEnvolvente = retanguloEnvolvente;
		this.identificador = identificador;
		retanguloEnvolvente.setPontoListener(this);
		construirConetores();
	}

	public Retangulo getRetanguloEnvolvente() {
		return retanguloEnvolvente;
	}

	public void setRetanguloEnvolvente(Retangulo retanguloEnvolvente) {
		this.retanguloEnvolvente = retanguloEnvolvente;
		construirConetores();
	}

	public Identificador getIdentificador() {
		return identificador;
	}

	public void setIdentificador(Identificador identificador) {
		this.identificador = identificador;
	}

	public void construirConetores() {
		this.conetorEste = new ConetorEste(this.identificador,
				this.retanguloEnvolvente);
		this.conetorNorte = new ConetorNorte(this.identificador,
				this.retanguloEnvolvente);
		this.conetorSul = new ConetorSul(this.identificador,
				this.retanguloEnvolvente);
		this.conetorOeste = new ConetorOeste(this.identificador,
				this.retanguloEnvolvente);
	}

	public Point contem(Identificador identificador, Coordenada coordenada) {
		Conetor conetor = identificador.getConetor();
		if (conetor != null) {
			if (this.conetorNorte.contem(coordenada)) {
				System.out.println("NORTE");
				return this.conetorNorte.getPontoNorte();
			} else if (conetorSul.contem(coordenada)) {
				System.out.println("SUL");
				return this.conetorSul.getPontoSul();
			} else if (this.conetorEste.contem(coordenada)) {
				System.out.println("ESTE");
				return this.conetorEste.getPontoEste();
			} else if (this.conetorOeste.contem(coordenada)) {
				System.out.println("OESTE");
				return this.conetorOeste.getPontoOeste();
			} else
				return null;
		}
		return null;
	}

	@Override
	public void desenhar(Graphics graphics) {
		// TODO Auto-generated method stub
		Graphics2D g2d = (Graphics2D) graphics.create();
		if (this.opcao == OpcaoConetor.ATIVADO) {
			g2d.setColor(Color.red);
			g2d.drawOval(this.conetorEste.getPontoEste().x,
					this.conetorEste.getPontoEste().y, 10, 10);
			g2d.drawOval(this.conetorNorte.getPontoNorte().x,
					this.conetorNorte.getPontoNorte().y, 10, 10);
			g2d.drawOval(this.conetorOeste.getPontoOeste().x,
					this.conetorOeste.getPontoOeste().y, 10, 10);
			g2d.drawOval(this.conetorSul.getPontoSul().x,
					this.conetorSul.getPontoSul().y, 10, 10);
			g2d.dispose();
		}
	}

	@Override
	public void PontoAlterado() {
		// TODO Auto-generated method stub
		construirConetores();
	}

	public OpcaoConetor getOpcao() {
		return opcao;
	}

	public void setOpcao(OpcaoConetor opcao) {
		this.opcao = opcao;
	}

}